#ifndef MAINSCENE_H
#define MAINSCENE_H

#include <QWidget>
#include <QTimer>
#include <QPixmap>
#include <QMediaPlayer>
#include <QAudioOutput>
#include <QMovie>


// 前置声明（减少头文件依赖）
///class QPainter;
#include <QPainter>
///class QMouseEvent;
#include <QMouseEvent>
///class QKeyEvent;
#include <QKeyEvent>
///class QPaintEvent;
#include <QPaintEvent>

// 自定义类前置声明
///class Map;
#include "map.h"
///class HeroPlane;
#include "heroplane.h"
///class EnemyPlane;
#include "enemyplane.h"
///class Bomb;
#include "bomb.h"

class MainScene : public QWidget
{
    Q_OBJECT

public:
    explicit MainScene(QWidget *parent = nullptr);
    ~MainScene() override;

    // 游戏控制
    void initScene();       // 初始化游戏场景
    void playGame();        // 开始游戏
    void restartGame();     // 重新开始游戏
    void gameOver();        // 游戏结束处理

signals:
    void gameOverSignal();  // 游戏结束信号

protected:
    // 重写事件处理函数
    void paintEvent(QPaintEvent *event) override;
    void mouseMoveEvent(QMouseEvent *event) override;
    void keyPressEvent(QKeyEvent *event) override;

private:
    // 游戏状态
    bool m_isGameOver;      // 游戏是否结束
    int m_lifeCount;        // 玩家生命值
    int m_recorder;         // 敌机生成计时器
    int m_score;            //游戏分数

    // 游戏元素
    Map m_map;              // 地图
    HeroPlane m_hero;       // 玩家飞机
    EnemyPlane m_enemys[ENEMY_NUM];  // 敌机数组
    Bomb m_bombs[BOMB_NUM]; // 爆炸效果数组

    // 音频系统
    QMediaPlayer *m_backgroundMusic;  // 背景音乐播放器
    QAudioOutput *m_audioOutput;      // 音频输出控制

    // UI元素
    QPixmap m_heartPixmap;  // 血量图标
    QTimer m_Timer;         // 游戏主循环定时器

    // 私有方法
    void initAudio();                   // 初始化音频系统
    void updatePosition();              // 更新所有元素位置
    void enemyToScene();                // 生成敌机
    void collisionDetection();          // 碰撞检测

    // 位置更新辅助函数
    void updateBulletsPosition();      // 更新子弹位置
    void updateEnemiesPosition();      // 更新敌机位置
    void updateBombsPosition();        // 更新爆炸效果
    void updateInvincibleStatus();     // 更新无敌状态

    // 绘图辅助函数
    void drawBackground(QPainter &painter);      // 绘制背景
    void drawGameElements(QPainter &painter);    // 绘制游戏元素
    void drawUIElements(QPainter &painter);      // 绘制UI元素
    void drawGameOverScreen(QPainter &painter);  // 绘制游戏结束画面

    // 游戏循环
    void gameFrameUpdate();            // 每帧更新逻辑
};

#endif // MAINSCENE_H